<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 传值和传址；

        // 简单数据类型 传值；
        // var a = 10;
        // var b = a;
        // b = 20;
        // console.log(a);


        // 复杂数据类型 传址；
        // var a = {
        //     num:10
        // }

        // var b = a;
        // b.num = 20;
        // console.log(a);

        // 不希望 传址 。数据之间出现 引用；
        // 如何解决 ？？ 深拷贝；
        // 1.json 可以做深拷贝；
        // json 深拷贝缺点 ：1.忽略  undefined 2.会忽略 函数 3. 会忽略 map 及set 数据；
        // 丢失 undefined 函数 map 和set；

        // var a = {
        //     num:10,
        //     key:undefined,
        //     fn(){
        //         console.log("fn");
        //     },
        //     map:new Map()
        // }
        // console.log(a);
        // // 通过json转换
        // var b = JSON.parse(JSON.stringify(a));
        // console.log(b);
        // b.num = 20;
        // console.log(a);


        // 2.通过递归来实现深拷贝；
        
        
        // 创建一个新的对象；
        // let temp = {};
        // // 把a里的内容 放在新的 temp里；
        // for(let key in a){
        //     temp[key] = a[key];
        // }
        // // console.log(temp);
        // temp.num = 20;
        // console.log(a);
        let a = {
            num:10,
            obj:{
                age:30
            }
        }
        // let a = ["张三","李四"];

        function deepCopy(obj){
            // let temp = {};
            // console.log(Object.prototype.toString.call(obj))
            let temp = Object.prototype.toString.call(obj)=="[object Object]"?{}:[];
            for(let key in obj){
                // 1.a['num']= 10;
                // 2.a['obj'] = {age:30};---->进入if  ---->  {age:30}传入 deepCopy ---》进入else --->赋值temp[age] = 30-->temp['obj'] = {age:30}
                if(typeof obj[key]== "object"){
                    temp[key] =  deepCopy(obj[key]);
                }else{
                    temp[key] = obj[key]
                }
            }
            return temp;
        }

        let b = deepCopy(a);
        // console.log(b);
        // b.num = 20;
        // console.log(a);
        b.obj.age = 20;
        console.log(a);





        // let b = a;
        // b.num = 20;
        // console.log(a);

// 作业： 1.复习 ；
// 2.实现三个选项卡 第一个普通选项卡； 第二个选项卡有下一个按钮 第三个选项卡用自动切换功能 
// 3.放大镜 ；







    </script>
</body>
</html>